const readline = require('readline');
const fs = require('fs');

// 分析日志,获取 v8 反优化函数信息.
class Deopt {
	constructor(props) {
		this.data = []
		// 逆优化函数
		this.deoptimization = []
		// 一条有效信息开始
		this.begin = undefined
		// 存储 deopt 数据
		this.deoptList = []
		// log 日志位置
		this.pm2File = props.pm2 
	}
	getDeopt(cb) {
		const me = this
		const rl = readline.createInterface({
  			input: fs.createReadStream(this.pm2File)
		});


		rl.on('line', (line) => {
			if(line.indexOf('[deoptimizing (DEOPT') != -1 && '<JS Function' !=-1) {
				// 一条 gc 开始
				return me.setPros(true),me.data.push(line)
			}
			if(me.begin) {
				// 读取第一行有效数据
				if(line.indexOf('[removing optimized code for:') === -1) {
					// 有效数据读取中...
					me.data.push(line)
				} else {
					me.data.push(line)
					// 一条 gc 数据读取完毕.
					
					
					me.deoptList.push(parse(me.data))
					
					
					// 重置属性.便于下次有效数据读取
					me.setPros()
				}
			}
		})
		.on('close', () => {
			typeof cb === 'function' && cb(me.deoptList)
			this.deoptList = []
		})
	}
	setPros(isBegin) {
		this.data = []
		this.begin = isBegin
	}
}

function parse(txt) {
	const funcName = txt[txt.length-1].split(':')[1].replace(']','')
	const info = txt[1]
	return {
		funcName,
		info
	}
}
module.exports = Deopt